/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package videorent;

import java.util.ArrayList;
import java.util.Iterator;

/** Representa a un asociado que ademas es premium.
 *
 * @author Rafael
 */
public class AsociadoPremium extends Asociado implements Cloneable {

    /**Cantidad de articulos audiovisuales que puede alquilar un asociado premium*/
    private final int ARTICULOS_AUDIOVISUALES = 10;
    /**Cantidad de articulos interactivos que puede alquilar un asociado premium*/
    private final int ARTICULOS_INTERACTIVOS = 10;

    /** Es el Constructor del Asociado Premium
     * @param codigo Codigo del asociado.
     * @param estado Estado de la asociacion "activo" o "suspendido".
     * @param dirFiscal direccion fiscal del asociado.
     * @param tC tarjeta de credito del asociado.
     * @param operaciones que ha realizado el asociado.
     * @param cedula Cedula del asociado.
     * @param nombre Nombre del asociado.
     * @param apellido Apellido del asociado.
     * @param telefono Telefono del asociado.
     */
    public AsociadoPremium(String codigo, String estado, DireccionFiscal dirFiscal, TarjetaCredito tC, ArrayList<Object> operaciones, int cedula, String nombre, String apellido, int telefono) {
        super(codigo, estado, dirFiscal, tC, operaciones, cedula, nombre, apellido, telefono);
    }

    /**
     * Este metodo obtiene la cantidad de los articulos interactivos a comprar o alquilar e
     * indica si se paso la cantidad maxima de articulos de este tipo para un asociado basico.
     * @return booleano que indica si se supera o no la cantidad maxima de articulos interactivos permitidos.
     */
    @Override
    public boolean cantidadMaximaArticulosInteractivos() {

        ArrayList<Object> articulos = new ArrayList<Object>();
        // Obtenemos las Operaciones del asociado
        ArrayList<Object> venta = this.getOperaciones();
        Iterator it = venta.iterator();
        int cantidad = 0;
        boolean resultado = false;

        while (it.hasNext()) {
            //Obtengo la operacion
            Object op = it.next();
            // Si la operacion es una compra
            if (op instanceof Compra) {
                Compra comp = (Compra) op;
                if ((comp.getMontoEntregado() == 0) && (comp.getTotal() == 0)) {
                    cantidad = cantidad + comp.obtenerCantArticulosInteractivos();
                }

            } else if (op instanceof Alquiler) {
                Alquiler alq = (Alquiler) op;
                if ((alq.getMontoEntregado() == 0) && (alq.getTotal() == 0)) {
                    cantidad = cantidad + alq.obtenerCantArticulosInteractivos();
                }
            }
        }

        if (cantidad >= ARTICULOS_INTERACTIVOS) {
            resultado = true;
        } else {
            resultado = false;
        }
        return resultado;
    }

    /**
     * Este metodo obtiene la cantidad de los articulos audiovisuales a comprar o alquilar e
     * indica si se paso la cantidad maxima de articulos de este tipo para un asociado basico.
     * @return booleano que indica si se supera o no la cantidad maxima de articulos audiovisuales permitidos.
     */
    @Override
    public boolean cantidadMaximaArticulosAudiovisuales() {

        ArrayList<Object> articulos = new ArrayList<Object>();
        // Obtenemos las Operaciones del asociado
        ArrayList<Object> venta = this.getOperaciones();
        Iterator it = venta.iterator();
        int cantidad = 0;
        boolean resultado = false;

        while (it.hasNext()) {
            //Obtengo la operacion
            Object op = it.next();
            // Si la operacion es una compra
            if (op instanceof Compra) {
                Compra comp = (Compra) op;
                if ((comp.getMontoEntregado() == 0) && (comp.getTotal() == 0)) {
                    cantidad = cantidad + comp.obtenerCantArticulosAudiovisuales();
                }

            } else if (op instanceof Alquiler) {
                Alquiler alq = (Alquiler) op;
                if ((alq.getMontoEntregado() == 0) && (alq.getTotal() == 0)) {
                    cantidad = cantidad + alq.obtenerCantArticulosAudiovisuales();
                }
            }
        }
        if (cantidad >= ARTICULOS_AUDIOVISUALES) {
            resultado = true;
        } else {
            resultado = false;
        }
        return resultado;
    }
}
